home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / doom / quake.zip / KASCAM17.ZIP / SOURCE / OGRE.QC < prev    next >
Text File  |  1997-02-19  |  17KB  |  461 lines

  1. /*
  2. ==============================================================================
  3.  
  4. OGRE
  5.  
  6. ==============================================================================
  7. */
  8.  
  9. $cd id1/models/ogre_c
  10. $origin 0 0 24
  11. $base base
  12. $skin base
  13.  
  14. $frame  stand1 stand2 stand3 stand4 stand5 stand6 stand7 stand8 stand9
  15.  
  16. $frame walk1 walk2 walk3 walk4 walk5 walk6 walk7
  17. $frame walk8 walk9 walk10 walk11 walk12 walk13 walk14 walk15 walk16
  18.  
  19. $frame run1 run2 run3 run4 run5 run6 run7 run8
  20.  
  21. $frame swing1 swing2 swing3 swing4 swing5 swing6 swing7
  22. $frame swing8 swing9 swing10 swing11 swing12 swing13 swing14
  23.  
  24. $frame smash1 smash2 smash3 smash4 smash5 smash6 smash7
  25. $frame smash8 smash9 smash10 smash11 smash12 smash13 smash14
  26.  
  27. $frame shoot1 shoot2 shoot3 shoot4 shoot5 shoot6
  28.  
  29. $frame pain1 pain2 pain3 pain4 pain5
  30.  
  31. $frame painb1 painb2 painb3
  32.  
  33. $frame painc1 painc2 painc3 painc4 painc5 painc6
  34.  
  35. $frame paind1 paind2 paind3 paind4 paind5 paind6 paind7 paind8 paind9 paind10
  36. $frame paind11 paind12 paind13 paind14 paind15 paind16
  37.  
  38. $frame paine1 paine2 paine3 paine4 paine5 paine6 paine7 paine8 paine9 paine10
  39. $frame paine11 paine12 paine13 paine14 paine15
  40.  
  41. $frame death1 death2 death3 death4 death5 death6
  42. $frame death7 death8 death9 death10 death11 death12
  43. $frame death13 death14
  44.  
  45. $frame bdeath1 bdeath2 bdeath3 bdeath4 bdeath5 bdeath6
  46. $frame bdeath7 bdeath8 bdeath9 bdeath10
  47.  
  48. $frame pull1 pull2 pull3 pull4 pull5 pull6 pull7 pull8 pull9 pull10 pull11
  49.  
  50. //=============================================================================
  51.  
  52.  
  53. void() OgreGrenadeExplode =
  54. {
  55.     T_RadiusDamage (self, self.owner, 40, world);
  56.     sound (self, CHAN_VOICE, "weapons/r_exp3.wav", 1, ATTN_NORM);
  57.  
  58.     WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
  59.     WriteByte (MSG_BROADCAST, TE_EXPLOSION);
  60.     WriteCoord (MSG_BROADCAST, self.origin_x);
  61.     WriteCoord (MSG_BROADCAST, self.origin_y);
  62.     WriteCoord (MSG_BROADCAST, self.origin_z);
  63.  
  64.     self.velocity = '0 0 0';
  65.     self.touch = SUB_Null;
  66.     setmodel (self, "progs/s_explod.spr");
  67.     self.solid = SOLID_NOT;
  68.     s_explode1 ();
  69. };
  70.  
  71. void() OgreGrenadeTouch =
  72. {
  73.     if (other == self.owner)
  74.         return;     // don't explode on owner
  75.     if (other.takedamage == DAMAGE_AIM)
  76.     {
  77.         OgreGrenadeExplode();
  78.         return;
  79.     }
  80.     sound (self, CHAN_VOICE, "weapons/bounce.wav", 1, ATTN_NORM);   // bounce sound
  81.     if (self.velocity == '0 0 0')
  82.         self.avelocity = '0 0 0';
  83. };
  84.  
  85. /*
  86. ================
  87. OgreFireGrenade
  88. ================
  89. */
  90. void() OgreFireGrenade =
  91. {
  92.     local   entity missile, mpuff;
  93.  
  94.     self.effects = self.effects | EF_MUZZLEFLASH;
  95.  
  96.     sound (self, CHAN_WEAPON, "weapons/grenade.wav", 1, ATTN_NORM);
  97.  
  98.     missile = spawn ();
  99.     missile.owner = self;
  100.     missile.movetype = MOVETYPE_BOUNCE;
  101.     missile.solid = SOLID_BBOX;
  102.  
  103. // set missile speed
  104.  
  105.     makevectors (self.angles);
  106.  
  107.     missile.velocity = normalize(self.enemy.origin - self.origin);
  108.     missile.velocity = missile.velocity * 600;
  109.     missile.velocity_z = 200;
  110.  
  111.     missile.avelocity = '300 300 300';
  112.  
  113.     missile.angles = vectoangles(missile.velocity);
  114.  
  115.     missile.touch = OgreGrenadeTouch;
  116.  
  117. // set missile duration
  118.     missile.nextthink = time + 2.5;
  119.     missile.think = OgreGrenadeExplode;
  120.  
  121.     setmodel (missile, "progs/grenade.mdl");
  122.     setsize (missile, '0 0 0', '0 0 0');
  123.     setorigin (missile, self.origin);
  124. };
  125.  
  126.  
  127. //=============================================================================
  128.  
  129. /*
  130. ================
  131. chainsaw
  132.  
  133. FIXME
  134. ================
  135. */
  136. void(float side) chainsaw =
  137. {
  138. local vector    delta;
  139. local float     ldmg;
  140.  
  141.     if (!self.enemy)
  142.         return;
  143.     if (!CanDamage (self.enemy, self))
  144.         return;
  145.  
  146.     ai_charge(10);
  147.  
  148.     delta = self.enemy.origin - self.origin;
  149.  
  150.     if (vlen(delta) > 100)
  151.         return;
  152.  
  153.     ldmg = (random() + random() + random()) * 4;
  154.     T_Damage (self.enemy, self, self, ldmg);
  155.  
  156.     if (side)
  157.     {
  158.         makevectors (self.angles);
  159.         if (side == 1)
  160.             SpawnMeatSpray (self.origin + v_forward*16, crandom() * 100 * v_right);
  161.         else
  162.             SpawnMeatSpray (self.origin + v_forward*16, side * v_right);
  163.     }
  164. };
  165.  
  166.  
  167. void() ogre_stand1  =[  $stand1,    ogre_stand2 ] {ai_stand();};
  168. void() ogre_stand2  =[  $stand2,    ogre_stand3 ] {ai_stand();};
  169. void() ogre_stand3  =[  $stand3,    ogre_stand4 ] {ai_stand();};
  170. void() ogre_stand4  =[  $stand4,    ogre_stand5 ] {ai_stand();};
  171. void() ogre_stand5  =[  $stand5,    ogre_stand6 ] {
  172. if (random() < 0.2)
  173.     sound (self, CHAN_VOICE, "ogre/ogidle.wav", 1, ATTN_IDLE);
  174. ai_stand();
  175. };
  176. void() ogre_stand6  =[  $stand6,    ogre_stand7 ] {ai_stand();};
  177. void() ogre_stand7  =[  $stand7,    ogre_stand8 ] {ai_stand();};
  178. void() ogre_stand8  =[  $stand8,    ogre_stand9 ] {ai_stand();};
  179. void() ogre_stand9  =[  $stand9,    ogre_stand1 ] {ai_stand();};
  180.  
  181. void() ogre_walk1   =[  $walk1,     ogre_walk2  ] {ai_walk(3);};
  182. void() ogre_walk2   =[  $walk2,     ogre_walk3  ] {ai_walk(2);};
  183. void() ogre_walk3   =[  $walk3,     ogre_walk4  ] {
  184. ai_walk(2);
  185. if (random() < 0.2)
  186.     sound (self, CHAN_VOICE, "ogre/ogidle.wav", 1, ATTN_IDLE);
  187. };
  188. void() ogre_walk4   =[  $walk4,     ogre_walk5  ] {ai_walk(2);};
  189. void() ogre_walk5   =[  $walk5,     ogre_walk6  ] {ai_walk(2);};
  190. void() ogre_walk6   =[  $walk6,     ogre_walk7  ] {
  191. ai_walk(5);
  192. if (random() < 0.1)
  193.     sound (self, CHAN_VOICE, "ogre/ogdrag.wav", 1, ATTN_IDLE);
  194. };
  195. void() ogre_walk7   =[  $walk7,     ogre_walk8  ] {ai_walk(3);};
  196. void() ogre_walk8   =[  $walk8,     ogre_walk9  ] {ai_walk(2);};
  197. void() ogre_walk9   =[  $walk9,     ogre_walk10 ] {ai_walk(3);};
  198. void() ogre_walk10  =[  $walk10,    ogre_walk11 ] {ai_walk(1);};
  199. void() ogre_walk11  =[  $walk11,    ogre_walk12 ] {ai_walk(2);};
  200. void() ogre_walk12  =[  $walk12,    ogre_walk13 ] {ai_walk(3);};
  201. void() ogre_walk13  =[  $walk13,    ogre_walk14 ] {ai_walk(3);};
  202. void() ogre_walk14  =[  $walk14,    ogre_walk15 ] {ai_walk(3);};
  203. void() ogre_walk15  =[  $walk15,    ogre_walk16 ] {ai_walk(3);};
  204. void() ogre_walk16  =[  $walk16,    ogre_walk1  ] {ai_walk(4);};
  205.  
  206. void() ogre_run1    =[  $run1,      ogre_run2   ] {ai_run(9);
  207. if (random() < 0.2)
  208.     sound (self, CHAN_VOICE, "ogre/ogidle2.wav", 1, ATTN_IDLE);
  209. };
  210. void() ogre_run2    =[  $run2,      ogre_run3   ] {ai_run(12);};
  211. void() ogre_run3    =[  $run3,      ogre_run4   ] {ai_run(8);};
  212. void() ogre_run4    =[  $run4,      ogre_run5   ] {ai_run(22);};
  213. void() ogre_run5    =[  $run5,      ogre_run6   ] {ai_run(16);};
  214. void() ogre_run6    =[  $run6,      ogre_run7   ] {ai_run(4);};
  215. void() ogre_run7    =[  $run7,      ogre_run8   ] {ai_run(13);};
  216. void() ogre_run8    =[  $run8,      ogre_run1   ] {ai_run(24);};
  217.  
  218. void() ogre_swing1  =[  $swing1,        ogre_swing2 ] {ai_charge(11);
  219. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  220. };
  221. void() ogre_swing2  =[  $swing2,        ogre_swing3 ] {ai_charge(1);};
  222. void() ogre_swing3  =[  $swing3,        ogre_swing4 ] {ai_charge(4);};
  223. void() ogre_swing4  =[  $swing4,        ogre_swing5 ] {ai_charge(13);};
  224. void() ogre_swing5  =[  $swing5,        ogre_swing6 ] {ai_charge(9); chainsaw(0);self.angles_y = self.angles_y + random()*25;};
  225. void() ogre_swing6  =[  $swing6,        ogre_swing7 ] {chainsaw(200);self.angles_y = self.angles_y + random()* 25;};
  226. void() ogre_swing7  =[  $swing7,        ogre_swing8 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  227. void() ogre_swing8  =[  $swing8,        ogre_swing9 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  228. void() ogre_swing9  =[  $swing9,        ogre_swing10 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  229. void() ogre_swing10 =[  $swing10,       ogre_swing11 ] {chainsaw(-200);self.angles_y = self.angles_y + random()* 25;};
  230. void() ogre_swing11 =[  $swing11,       ogre_swing12 ] {chainsaw(0);self.angles_y = self.angles_y + random()* 25;};
  231. void() ogre_swing12 =[  $swing12,       ogre_swing13 ] {ai_charge(3);};
  232. void() ogre_swing13 =[  $swing13,       ogre_swing14 ] {ai_charge(8);};
  233. void() ogre_swing14 =[  $swing14,       ogre_run1   ] {ai_charge(9);};
  234.  
  235. void() ogre_smash1  =[  $smash1,        ogre_smash2 ] {ai_charge(6);
  236. sound (self, CHAN_WEAPON, "ogre/ogsawatk.wav", 1, ATTN_NORM);
  237. };
  238. void() ogre_smash2  =[  $smash2,        ogre_smash3 ] {ai_charge(0);};
  239. void() ogre_smash3  =[  $smash3,        ogre_smash4 ] {ai_charge(0);};
  240. void() ogre_smash4  =[  $smash4,        ogre_smash5 ] {ai_charge(1);};
  241. void() ogre_smash5  =[  $smash5,        ogre_smash6 ] {ai_charge(4);};
  242. void() ogre_smash6  =[  $smash6,        ogre_smash7 ] {ai_charge(4); chainsaw(0);};
  243. void() ogre_smash7  =[  $smash7,        ogre_smash8 ] {ai_charge(4); chainsaw(0);};
  244. void() ogre_smash8  =[  $smash8,        ogre_smash9 ] {ai_charge(10); chainsaw(0);};
  245. void() ogre_smash9  =[  $smash9,        ogre_smash10 ] {ai_charge(13); chainsaw(0);};
  246. void() ogre_smash10 =[  $smash10,       ogre_smash11 ] {chainsaw(1);};
  247. void() ogre_smash11 =[  $smash11,       ogre_smash12 ] {ai_charge(2); chainsaw(0);
  248. self.nextthink = self.nextthink + random()*0.2;};   // slight variation
  249. void() ogre_smash12 =[  $smash12,       ogre_smash13 ] {ai_charge();};
  250. void() ogre_smash13 =[  $smash13,       ogre_smash14 ] {ai_charge(4);};
  251. void() ogre_smash14 =[  $smash14,       ogre_run1   ] {ai_charge(12);};
  252.  
  253. void() ogre_nail1   =[  $shoot1,        ogre_nail2  ] {ai_face();};
  254. void() ogre_nail2   =[  $shoot2,        ogre_nail3  ] {ai_face();};
  255. void() ogre_nail3   =[  $shoot2,        ogre_nail4  ] {ai_face();};
  256. void() ogre_nail4   =[  $shoot3,        ogre_nail5  ] {ai_face();OgreFireGrenade();};
  257. void() ogre_nail5   =[  $shoot4,        ogre_nail6  ] {ai_face();};
  258. void() ogre_nail6   =[  $shoot5,        ogre_nail7  ] {ai_face();};
  259. void() ogre_nail7   =[  $shoot6,        ogre_run1   ] {ai_face();};
  260.  
  261. void()  ogre_pain1  =[  $pain1,     ogre_pain2  ] {};
  262. void()  ogre_pain2  =[  $pain2,     ogre_pain3  ] {};
  263. void()  ogre_pain3  =[  $pain3,     ogre_pain4  ] {};
  264. void()  ogre_pain4  =[  $pain4,     ogre_pain5  ] {};
  265. void()  ogre_pain5  =[  $pain5,     ogre_run1   ] {};
  266.  
  267.  
  268. void()  ogre_painb1 =[  $painb1,    ogre_painb2 ] {};
  269. void()  ogre_painb2 =[  $painb2,    ogre_painb3 ] {};
  270. void()  ogre_painb3 =[  $painb3,    ogre_run1   ] {};
  271.  
  272.  
  273. void()  ogre_painc1 =[  $painc1,    ogre_painc2 ] {};
  274. void()  ogre_painc2 =[  $painc2,    ogre_painc3 ] {};
  275. void()  ogre_painc3 =[  $painc3,    ogre_painc4 ] {};
  276. void()  ogre_painc4 =[  $painc4,    ogre_painc5 ] {};
  277. void()  ogre_painc5 =[  $painc5,    ogre_painc6 ] {};
  278. void()  ogre_painc6 =[  $painc6,    ogre_run1   ] {};
  279.  
  280.  
  281. void()  ogre_paind1 =[  $paind1,    ogre_paind2 ] {};
  282. void()  ogre_paind2 =[  $paind2,    ogre_paind3 ] {ai_pain(10);};
  283. void()  ogre_paind3 =[  $paind3,    ogre_paind4 ] {ai_pain(9);};
  284. void()  ogre_paind4 =[  $paind4,    ogre_paind5 ] {ai_pain(4);};
  285. void()  ogre_paind5 =[  $paind5,    ogre_paind6 ] {};
  286. void()  ogre_paind6 =[  $paind6,    ogre_paind7 ] {};
  287. void()  ogre_paind7 =[  $paind7,    ogre_paind8 ] {};
  288. void()  ogre_paind8 =[  $paind8,    ogre_paind9 ] {};
  289. void()  ogre_paind9 =[  $paind9,    ogre_paind10    ] {};
  290. void()  ogre_paind10=[  $paind10,   ogre_paind11    ] {};
  291. void()  ogre_paind11=[  $paind11,   ogre_paind12    ] {};
  292. void()  ogre_paind12=[  $paind12,   ogre_paind13    ] {};
  293. void()  ogre_paind13=[  $paind13,   ogre_paind14    ] {};
  294. void()  ogre_paind14=[  $paind14,   ogre_paind15    ] {};
  295. void()  ogre_paind15=[  $paind15,   ogre_paind16    ] {};
  296. void()  ogre_paind16=[  $paind16,   ogre_run1   ] {};
  297.  
  298. void()  ogre_paine1 =[  $paine1,    ogre_paine2 ] {};
  299. void()  ogre_paine2 =[  $paine2,    ogre_paine3 ] {ai_pain(10);};
  300. void()  ogre_paine3 =[  $paine3,    ogre_paine4 ] {ai_pain(9);};
  301. void()  ogre_paine4 =[  $paine4,    ogre_paine5 ] {ai_pain(4);};
  302. void()  ogre_paine5 =[  $paine5,    ogre_paine6 ] {};
  303. void()  ogre_paine6 =[  $paine6,    ogre_paine7 ] {};
  304. void()  ogre_paine7 =[  $paine7,    ogre_paine8 ] {};
  305. void()  ogre_paine8 =[  $paine8,    ogre_paine9 ] {};
  306. void()  ogre_paine9 =[  $paine9,    ogre_paine10    ] {};
  307. void()  ogre_paine10=[  $paine10,   ogre_paine11    ] {};
  308. void()  ogre_paine11=[  $paine11,   ogre_paine12    ] {};
  309. void()  ogre_paine12=[  $paine12,   ogre_paine13    ] {};
  310. void()  ogre_paine13=[  $paine13,   ogre_paine14    ] {};
  311. void()  ogre_paine14=[  $paine14,   ogre_paine15    ] {};
  312. void()  ogre_paine15=[  $paine15,   ogre_run1   ] {};
  313.  
  314.  
  315. void(entity attacker, float damage) ogre_pain =
  316. {
  317.     local float r;
  318.  
  319. // don't make multiple pain sounds right after each other
  320.     if (self.pain_finished > time)
  321.         return;
  322.  
  323.     sound (self, CHAN_VOICE, "ogre/ogpain1.wav", 1, ATTN_NORM);
  324.  
  325.     r = random();
  326.  
  327.     if (r < 0.25)
  328.     {
  329.         ogre_pain1 ();
  330.         self.pain_finished = time + 1;
  331.     }
  332.     else if (r < 0.5)
  333.     {
  334.         ogre_painb1 ();
  335.         self.pain_finished = time + 1;
  336.     }
  337.     else if (r < 0.75)
  338.     {
  339.         ogre_painc1 ();
  340.         self.pain_finished = time + 1;
  341.     }
  342.     else if (r < 0.88)
  343.     {
  344.         ogre_paind1 ();
  345.         self.pain_finished = time + 2;
  346.     }
  347.     else
  348.     {
  349.         ogre_paine1 ();
  350.         self.pain_finished = time + 2;
  351.     }
  352. };
  353.  
  354. void()  ogre_die1   =[  $death1,    ogre_die2   ] {};
  355. void()  ogre_die2   =[  $death2,    ogre_die3   ] {};
  356. void()  ogre_die3   =[  $death3,    ogre_die4   ]
  357. {self.solid = SOLID_NOT;
  358. self.ammo_rockets = 2;DropBackpack();};
  359. void()  ogre_die4   =[  $death4,    ogre_die5   ] {};
  360. void()  ogre_die5   =[  $death5,    ogre_die6   ] {};
  361. void()  ogre_die6   =[  $death6,    ogre_die7   ] {};
  362. void()  ogre_die7   =[  $death7,    ogre_die8   ] {};
  363. void()  ogre_die8   =[  $death8,    ogre_die9   ] {};
  364. void()  ogre_die9   =[  $death9,    ogre_die10  ] {};
  365. void()  ogre_die10  =[  $death10,   ogre_die11  ] {};
  366. void()  ogre_die11  =[  $death11,   ogre_die12  ] {};
  367. void()  ogre_die12  =[  $death12,   ogre_die13  ] {};
  368. void()  ogre_die13  =[  $death13,   ogre_die14  ] {};
  369. void()  ogre_die14  =[  $death14,   ogre_die14  ] {};
  370.  
  371. void()  ogre_bdie1  =[  $bdeath1,   ogre_bdie2  ] {};
  372. void()  ogre_bdie2  =[  $bdeath2,   ogre_bdie3  ] {ai_forward(5);};
  373. void()  ogre_bdie3  =[  $bdeath3,   ogre_bdie4  ]
  374. {self.solid = SOLID_NOT;
  375. self.ammo_rockets = 2;DropBackpack();};
  376. void()  ogre_bdie4  =[  $bdeath4,   ogre_bdie5  ] {ai_forward(1);};
  377. void()  ogre_bdie5  =[  $bdeath5,   ogre_bdie6  ] {ai_forward(3);};
  378. void()  ogre_bdie6  =[  $bdeath6,   ogre_bdie7  ] {ai_forward(7);};
  379. void()  ogre_bdie7  =[  $bdeath7,   ogre_bdie8  ] {ai_forward(25);};
  380. void()  ogre_bdie8  =[  $bdeath8,   ogre_bdie9  ] {};
  381. void()  ogre_bdie9  =[  $bdeath9,   ogre_bdie10 ] {};
  382. void()  ogre_bdie10 =[  $bdeath10,  ogre_bdie10 ] {};
  383.  
  384. void() ogre_die =
  385. {
  386. // check for gib
  387.     if (self.health < -80)
  388.     {
  389.         sound (self, CHAN_VOICE, "player/udeath.wav", 1, ATTN_NORM);
  390.         ThrowHead ("progs/h_ogre.mdl", self.health);
  391.         ThrowGib ("progs/gib3.mdl", self.health);
  392.         ThrowGib ("progs/gib3.mdl", self.health);
  393.         ThrowGib ("progs/gib3.mdl", self.health);
  394.         return;
  395.     }
  396.  
  397.     sound (self, CHAN_VOICE, "ogre/ogdth.wav", 1, ATTN_NORM);
  398.  
  399.     if (random() < 0.5)
  400.         ogre_die1 ();
  401.     else
  402.         ogre_bdie1 ();
  403. };
  404.  
  405. void() ogre_melee =
  406. {
  407.     if (random() > 0.5)
  408.         ogre_smash1 ();
  409.     else
  410.         ogre_swing1 ();
  411. };
  412.  
  413.  
  414. /*QUAKED monster_ogre (1 0 0) (-32 -32 -24) (32 32 64) Ambush
  415.  
  416. */
  417. void() monster_ogre =
  418. {
  419.     if (deathmatch)
  420.     {
  421.         remove(self);
  422.         return;
  423.     }
  424.     precache_model ("progs/ogre.mdl");
  425.     precache_model ("progs/h_ogre.mdl");
  426.     precache_model ("progs/grenade.mdl");
  427.  
  428.     precache_sound ("ogre/ogdrag.wav");
  429.     precache_sound ("ogre/ogdth.wav");
  430.     precache_sound ("ogre/ogidle.wav");
  431.     precache_sound ("ogre/ogidle2.wav");
  432.     precache_sound ("ogre/ogpain1.wav");
  433.     precache_sound ("ogre/ogsawatk.wav");
  434.     precache_sound ("ogre/ogwake.wav");
  435.  
  436.     self.solid = SOLID_SLIDEBOX;
  437.     self.movetype = MOVETYPE_STEP;
  438.  
  439.     setmodel (self, "progs/ogre.mdl");
  440.  
  441.     setsize (self, VEC_HULL2_MIN, VEC_HULL2_MAX);
  442.     self.health = 200;
  443.  
  444.     self.th_stand = ogre_stand1;
  445.     self.th_walk = ogre_walk1;
  446.     self.th_run = ogre_run1;
  447.     self.th_die = ogre_die;
  448.     self.th_melee = ogre_melee;
  449.     self.th_missile = ogre_nail1;
  450.     self.th_pain = ogre_pain;
  451.  
  452.     walkmonster_start();
  453. };
  454.  
  455. void() monster_ogre_marksman =
  456. {
  457.     monster_ogre ();
  458. };
  459.  
  460.  
  461.